//package com.inst;
//
//
//
//public class TaxCalculator {
//    public static void main(String[] args) throws InterruptedException {
//        int productId = 1;
//        doQueryProduct(productId);
//
//    }
//
//    private static Object doQueryProduct(int productId) throws InterruptedException {
//        //ToDo 1-1.先判断redis是否存在数据
//        boolean redisExist = queryRedis(productId);
//        if (!redisExist) {
//            //todo 2-1. redis不存在,先获取redis锁
//            boolean redisLock = getRedisLock(productId);
//            if (redisLock) {
//                //todo 2-2 获取redis锁,开始查询mysql数据
//                Object product = queryMysql(productId);
//                if (null != product) {
//                    //ToDo 2-3 存进redis中 [缓存击穿]
//                    insetRedisData(productId, product);
//                    return product;
//                } else {
//                    //ToDo 2-4 mysql没数据 ,redis存放一个空数据,[缓存穿透]
//                    insetRedisData(productId, null);
//                    return null;
//                }
//            } else {
//                //todo 没有获取redis锁,不应该一直死循环获取锁,应该是休眠一会,再次递归执行这个方法
//                Thread.sleep(100);
//                while (!redisLock){
//                    //死循环,一直尝试获取锁
//                    redisLock = getRedisLock(productId);
//                    if(redisLock){
//
//
//                    }
//                }
//            }
//        } else {
//            //todo 1-2 redis存在数据,直接返回
//            return new Object();
//        }
//    }
//
//    private static void insetRedisData(int productId, Object product) {
//    }
//
//    private static Object queryMysql(int productId) {
//        return null;
//    }
//
//    private static boolean getRedisLock(int productId) {
//        return true;
//    }
//
//    private static boolean queryRedis(int productId) {
//        return true;
//    }
//
//
//}
